﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace FrontEndPlus.Módulos.RRHH
{
    public partial class wbfrm_Manejo_Personal : System.Web.UI.Page
    {
        #region Metodos

        private void CargarEmpleado()
        {
            WCF_Gimnasio.cls_Empleado empleado = new WCF_Gimnasio.cls_Empleado();
            empleado.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());

            empleado.IdEmpleado = Convert.ToInt32(Request.QueryString["IdEmpleado"]);

            using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
            {
                empleado = (WCF_Gimnasio.cls_Empleado)servicio.TraerObjeto(empleado);
            }

            List<WCF_Gimnasio.cls_Empleado> ltEmpleado = new List<WCF_Gimnasio.cls_Empleado>(1);
            ltEmpleado.Add(empleado);

            ViewState["ListEmpleado"] = ltEmpleado;
        }

        private void CargarHistorialPlanilla()
        {
            WCF_Gimnasio.cls_Planilla planilla = new WCF_Gimnasio.cls_Planilla();
            planilla.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
            planilla.Filtros = new string[2];

            planilla.Filtros[0] = Request.QueryString["IdEmpleado"];

            using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
            {
                ViewState["HistorialPlanilla"] = servicio.Listar(1, planilla).Tables[0];
            }
        }

        private decimal SalarioEmpleado()
        {
            List<WCF_Gimnasio.cls_Empleado> ltEmpleado = (List<WCF_Gimnasio.cls_Empleado>)ViewState["ListEmpleado"];

            WCF_Gimnasio.cls_Tipo_Empleado tipoEmpleado = new WCF_Gimnasio.cls_Tipo_Empleado();
            tipoEmpleado.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());

            tipoEmpleado.IdTipoEmpleado = ltEmpleado[0].IdTipoEmpleado;

            using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
            {
                tipoEmpleado = (WCF_Gimnasio.cls_Tipo_Empleado)servicio.TraerObjeto(tipoEmpleado);
            }

            return tipoEmpleado.MontoHora;
        }

        private decimal CalculoLiquidacionEmpleadoInterno()
        {
            List<WCF_Gimnasio.cls_Empleado> ltEmpleado = (List<WCF_Gimnasio.cls_Empleado>)ViewState["ListEmpleado"];

            decimal salarioDiario = SalarioEmpleado() * 8;

            decimal nominaUltima = (salarioDiario * DateTime.Now.Day) / (decimal)1.10;

            decimal vacaciones = salarioDiario * 15 / (decimal)1.10;

            decimal diferenciaAnos = (Convert.ToDateTime(ltEmpleado[0].FechaIngreso).Year - DateTime.Now.Year) * 30;

            decimal diferenciaDias = (((Convert.ToDateTime(ltEmpleado[0].FechaIngreso).Day - DateTime.Now.Day)) * 30) / 360;

            decimal indeminizacion = diferenciaAnos + diferenciaDias;

            return nominaUltima + vacaciones + indeminizacion;
        }

        private decimal CalculoLiquidacionEmpleadoExterno()
        {
            List<WCF_Gimnasio.cls_Empleado> ltEmpleado = (List<WCF_Gimnasio.cls_Empleado>)ViewState["ListEmpleado"];

            decimal salarioDiario = SalarioEmpleado() * 8;

            decimal nominaUltima = (salarioDiario * DateTime.Now.Day) / (decimal)1.10;

            decimal vacaciones = salarioDiario * 15 / (decimal)1.10;

            decimal diferenciaAnos = (Convert.ToDateTime(ltEmpleado[0].FechaIngreso).Year - DateTime.Now.Year) * 30;

            decimal diferenciaDias = (((Convert.ToDateTime(ltEmpleado[0].FechaIngreso).Day - DateTime.Now.Day)) * 30) / 360;

            decimal indeminizacion = diferenciaAnos + diferenciaDias;

            return nominaUltima + vacaciones + indeminizacion;
        }

        #endregion

        #region Eventos

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CargarEmpleado();
                CargarHistorialPlanilla();
            }

            frmvw_informacion_Completa_Empleado.DataSource = (List<WCF_Gimnasio.cls_Empleado>)ViewState["ListEmpleado"];
            frmvw_informacion_Completa_Empleado.DataBind();

            gv_historico_Planilla.DataSource = (DataTable)ViewState["HistorialPlanilla"];
            gv_historico_Planilla.DataBind();
        }

        protected void rdobtnlt_opciones_Empleado_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (rdobtnlt_opciones_Empleado.SelectedItem.Value)
            {
                case "1":
                    mtvw_opciones_Empleado.SetActiveView(vw_informacion_Empleado);
                    break;

                case "2":
                    mtvw_opciones_Empleado.SetActiveView(vw_liquidacion_Empleado);
                    break;

                default:
                    break;
            }
        }

        protected void lnkbtn_regreso_Click(object sender, EventArgs e)
        {
            Response.Redirect("wbfrm_Buscar_Empleado.aspx");
        }

        protected void btn_realizar_Liquidacion_Click(object sender, EventArgs e)
        {
            List<WCF_Gimnasio.cls_Empleado> ltEmpleado = (List<WCF_Gimnasio.cls_Empleado>)ViewState["ListEmpleado"];

            if (gv_historico_Planilla.DataSource != null)
            {
                if (ltEmpleado[0].IdTipoEmpleado == 2 || ltEmpleado[0].IdTipoEmpleado == 4)
                {
                    CalculoLiquidacionEmpleadoExterno();
                }

                else
                {
                    CalculoLiquidacionEmpleadoInterno();
                }

                string mensajeErrorBorrar = string.Empty;
                bool respuesta = false;

                using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
                {
                    respuesta = servicio.EliminarRegistro(ref mensajeErrorBorrar, ltEmpleado[0]);
                }

                if (respuesta)
                {
                    object mensajeError = string.Empty;
                    using (WCF_Gimnasio.ServiceClient servicio = new WCF_Gimnasio.ServiceClient())
                    {
                        servicio.OtrosProcesos(4, ref mensajeError, ltEmpleado[0]);
                        servicio.OtrosProcesos(3, ref mensajeError, ltEmpleado[0]);                     
                    }

                    string script = "<script type='text/javascript'> smoke.alert('Se realizado el proceso solicitado.', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);

                    Response.Redirect("wbfrm_Buscar_Empleado.aspx");
                }

                else
                {
                    string script = "<script type='text/javascript'> smoke.alert('No se pudo realizar el proceso solicitado.', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
            }
        }

        #endregion

    }
}